package com.mida.app.report.process;


import com.mida.bms.report.vo.*;
import com.mida.tool.common.result.ActionResult;
import com.mida.tool.common.result.ListResult;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * <h1>报告书写</h1>
 * <p>
 *
 * </p>
 *
 * @author jian.li on 2021/4/28 9:21
 */
public interface DocReportProcess {

    ListResult<ReportInitializationResult> initializeDocReport(DocReportInitializationRequest docReportInitializationRequest, HttpServletRequest httpServletRequest);

    ListResult<ReportResult> saveTemporarily(DocReportPreservationRequest request, HttpServletRequest httpServletRequest) throws NoSuchFieldException;

    ListResult<String> saveDocReport(DocReportPreservationRequest request, HttpServletRequest httpServletRequest) throws NoSuchFieldException;

    ListResult<ReportResult> getDocReport(DocReportInitializationRequest request, HttpServletRequest httpServletRequest);

    ActionResult editDocReport(Long stReportSoid, HttpServletRequest httpServletRequest);

    ActionResult saveTemplate(DocReportPreservationRequest request, HttpServletRequest httpServletRequest);

    ActionResult modifyReportStatus(DocReportPreservationRequest reportRequest, HttpServletRequest httpServletRequest);

    ActionResult modifyStatus(String stReportSoid, HttpServletRequest httpServletRequest);

    //    ActionResult withdrawStatus(DocReportPreservationRequest reportRequest);
    ActionResult withdrawStatus(String stReportSoid);

    ActionResult savePdf(Long stReportSoid, MultipartFile file, HttpServletRequest httpServletRequest);

    ActionResult saveStructuredReport(StructuredReportRequest request, HttpServletRequest httpServletRequest);

//    ActionResult saveDocReportTypes(DocReportPreservationRequest docReportRequest,HttpServletRequest httpServletRequest);

    ListResult<String> saveDocReportByRegistrationAndExam(DocReportPreservationRequest request, HttpServletRequest httpServletRequest) throws NoSuchFieldException;

    ListResult<ReportResult> getDocReportByTypes(DocReportInitializationRequest request, HttpServletRequest httpServletRequest);

    ListResult<ReportInitializationResult> initializeDocReportTypes(DocReportInitializationRequest docReportInitializationRequest, HttpServletRequest httpServletRequest);

    ListResult<ReportResult> saveTemporarilyTypes(DocReportPreservationRequest request, HttpServletRequest httpServletRequest) throws NoSuchFieldException;

    List<DocReportRequisitionRelationVo> selectByStReportSoid(Long stReportSoid);


//    ListResult<ReportNumbersVo> queryCompletedReportsNumbers(DocReportListPageVo vo) throws Exception;

    void getReportPdf(ReportSearchRequest request,HttpServletResponse httpServletResponse);

    ListResult<String> getReportPdfUrl(ReportSearchRequest request);

    ActionResult publishReport(ReportPublishRequest reportPublishRequest, HttpServletRequest httpServletRequest);

    ActionResult recallReport(ReportRecallRequest reportRecallRequest, HttpServletRequest httpServletRequest);

    ListResult getReviewPublishParam();

    ListResult getRecallLimit();

    ListResult<ReportResult> getDocReportByStReportSoid(Long stReportSoid);

    ListResult<Long> saveCriticValue(CriticalValueRequest request);
}
